Curso de Estatística com Python

Partes 1 e 2 - PNAD 2015

Luiz Diego Vidal Santos

Universidade Estadual de Feira de Santana (UEFS)

Curso de Estatística - Parte 1 e 2

1 - Conhecendo os Dados

1.1 - Dataset do Projeto

Pesquisa Nacional por Amostra de Domicílios - 2015

A PNAD investiga anualmente características gerais da população: educação, trabalho, rendimento e habitação.

Constitui, ao longo de 49 anos, um importante instrumento para formulação, validação e avaliação de políticas de desenvolvimento socioeconômico.

Fonte: IBGE - PNAD 2015

Tratamentos realizados:

  1. Eliminados registros com Renda inválida (999 999 999 999)
  2. Eliminados registros com Renda missing
  3. Considerados somente registros das Pessoas de Referência de cada domicílio

Importando pandas e lendo o dataset

pandas - Python Data Analysis Library

import pandas as pd

dados = pd.read_csv('dados.csv')
dados.head()
dados.shape
dados.info()

1.2 - Tipos de Dados

Variáveis Qualitativas

Qualitativas Ordinais

► Variáveis que podem ser ordenadas ou hierarquizadas

dados['Anos de Estudo'].value_counts().sort_index()

Qualitativas Nominais

► Variáveis que não podem ser ordenadas ou hierarquizadas

dados['Cor'].value_counts()
dados['Sexo'].value_counts()

Variáveis Quantitativas

Quantitativas Discretas

► Valores formam um conjunto finito ou enumerável

dados['Idade'].value_counts().sort_index().head(20)

A variável idade pode ser classificada como:

  1. Quantitativa discreta - anos completos
  2. Quantitativa contínua - idade exata
  3. Qualitativa ordinal - faixas de idade

Quantitativas Contínuas

► Valores em escala contínua (números reais)

dados['Altura'].describe()
dados['Renda'].describe()

2 - Distribuição de Frequências

2.1 - Variáveis Qualitativas

Método 1 - value_counts()

frequencia = dados['Sexo'].value_counts()
frequencia
percentual = dados['Sexo'].value_counts(normalize=True) * 100
percentual

Método 2 - crosstab()

pd.crosstab(dados['Sexo'], columns='Frequência')

2.2 - Variáveis Quantitativas (classes personalizadas)

Classificação por Salário Mínimo

Classe Faixa (SM) Renda (R$)
A > 20 SM > 15.760
B 10 a 20 SM 7.880 - 15.760
C 4 a 10 SM 3.152 - 7.880
D 2 a 4 SM 1.576 - 3.152
E Até 2 SM ≤ 1.576

SM em 2015 = R$ 788,00

classes = [0, 1576, 3152, 7880, 15760, 200000]
labels = ['E', 'D', 'C', 'B', 'A']

dados['Classe'] = pd.cut(
    dados['Renda'], 
    bins=classes, 
    labels=labels, 
    include_lowest=True
)
dados['Classe'].value_counts().sort_index()

2.3 - Variáveis Quantitativas (amplitude fixa)

Regra de Sturges

\[k = 1 + \frac{10}{3}\log_{10}n\]

import numpy as np

n = dados.shape[0]
k = int(1 + (10/3) * np.log10(n))
k
# Tabela de frequências com amplitude fixa
frequencias = dados['Renda'].value_counts(bins=k).sort_index()
frequencias

2.4 - Histograma

seaborn - Statistical Data Visualization

import seaborn as sns
import matplotlib.pyplot as plt

ax = sns.histplot(dados['Altura'], kde=True)
ax.set(title='Distribuição da Altura', xlabel='Altura', ylabel='Frequência')
plt.show()
ax = sns.histplot(dados['Renda'], kde=True)
ax.set(title='Distribuição da Renda', xlabel='Renda (R$)', ylabel='Frequência')
plt.show()

3 - Medidas de Tendência Central

DataFrame de Exemplo

df_exemplo = pd.DataFrame({
    'valores': [10, 29, 26, 28, 15, 23, 25, 17, 0, 20]
})
df_exemplo

3.1 - Média Aritmética

Representada por \(\mu\) (população) e \(\bar{X}\) (amostra):

\[\mu = \frac{1}{n}\sum_{i=1}^{n}X_i\]

dados['Renda'].mean()
dados['Altura'].mean()
dados['Idade'].mean()

3.2 - Mediana

Procedimento:

  1. Ordenar o conjunto de dados
  2. Identificar \(n\)
  3. Quando \(n\) ímpar: \(Elemento_{Md} = \frac{n+1}{2}\)
  4. Quando \(n\) par: \(Elemento_{Md} = \frac{n}{2}\)
  5. Quando \(n\) ímpar: \(Md = X_{Elemento_{Md}}\)
  6. Quando \(n\) par: \(Md = \frac{X_{Elemento_{Md}} + X_{Elemento_{Md}+1}}{2}\)

Obtendo no dataset:

dados['Renda'].median()
dados['Altura'].median()

3.3 - Moda

Valor mais frequente de um conjunto de dados. Bastante utilizada para dados qualitativos.

dados['Renda'].mode()
dados['Idade'].mode()

3.4 - Relação entre Média, Mediana e Moda

Avaliando a Variável RENDA

print(f"Média:   {dados['Renda'].mean():.2f}")
print(f"Mediana: {dados['Renda'].median():.2f}")
print(f"Moda:    {dados['Renda'].mode()[0]:.2f}")

ax = sns.histplot(dados['Renda'], kde=True)
plt.show()

Avaliando a Variável ALTURA

print(f"Média:   {dados['Altura'].mean():.2f}")
print(f"Mediana: {dados['Altura'].median():.2f}")
print(f"Moda:    {dados['Altura'].mode()[0]:.2f}")

ax = sns.histplot(dados['Altura'], kde=True)
plt.show()

4 - Medidas Separatrizes

4.1 - Quartis, Decis e Percentis

  • Mediana: divide em 2 partes iguais
  • Quartis: divide em 4 partes iguais
  • Decis: divide em 10 partes iguais
  • Centis/Percentis: divide em 100 partes iguais
dados['Renda'].quantile([0.25, 0.5, 0.75])
dados['Renda'].quantile([0.1, 0.2, 0.3, 0.4, 
                          0.5, 0.6, 0.7, 0.8, 0.9])

4.2 - Box-plot

O box plot dá uma ideia de: posição, dispersão, assimetria, caudas e outliers.

ax = sns.boxplot(x=dados['Altura'], orient='h')
ax.set(title='Box-plot: Altura', xlabel='Altura')
plt.show()
ax = sns.boxplot(x=dados['Renda'], orient='h')
ax.set(title='Box-plot: Renda', xlabel='Renda (R$)')
plt.show()

5 - Medidas de Dispersão

5.1 - Desvio Médio Absoluto

\[DM = \frac{1}{n}\sum_{i=1}^{n}|X_i - \bar{X}|\]

dados['Renda'].mad()

5.2 - Variância

Variância Populacional

\[\sigma^2 = \frac{1}{n}\sum_{i=1}^{n}(X_i - \mu)^2\]

dados['Renda'].var()  # amostral (ddof=1)

Variância Amostral

\[S^2 = \frac{1}{n-1}\sum_{i=1}^{n}(X_i - \bar{X})^2\]

dados['Altura'].var()

5.3 - Desvio Padrão

Desvio Padrão Populacional

\[\sigma = \sqrt{\frac{1}{n}\sum_{i=1}^{n}(X_i - \mu)^2} = \sqrt{\sigma^2}\]

Desvio Padrão Amostral

\[S = \sqrt{\frac{1}{n-1}\sum_{i=1}^{n}(X_i - \bar{X})^2} = \sqrt{S^2}\]

dados['Renda'].std()
dados['Altura'].std()

Obrigado!

Luiz Diego Vidal Santos

Universidade Federal de Sergipe

diego@academico.ufs.br